package grpcservertag

import (
	"context"
	"errors"
	"go-gin-api/app/model/tag"
	grpctag "go-gin-api/app/proto/tag"
)

type TagServer struct {
	tag tag.TagRepository
}

func NewTagSever(tag tag.TagRepository) grpctag.TagHandler {
	return &TagServer{
		tag: tag,
	}
}

func (s *TagServer) Tag(ctx context.Context, req *grpctag.TagRequest, res *grpctag.TagResponse) error {
	flag := s.tag.ExistsTagByName(req.Name, 0)
	if flag {
		return errors.New("tag name 存在 不允许添加")
	}
	err := s.tag.TagAdd(req)
	if err == nil {
		res.Res = true
	}
	return err
}

func (s *TagServer) TagDel(ctx context.Context, req *grpctag.TagDelRequest, res *grpctag.TagDelResponse) error {
	err := s.tag.TagDel(req)
	if err == nil {
		res.Res = true
	}
	return err
}

func (s *TagServer) TagUpdate(ctx context.Context, req *grpctag.TagUpdateRequest, res *grpctag.TagUpdateResponse) error {
	flag := s.tag.ExistsTagByName(req.Name, int(req.Id))
	if flag {
		return errors.New("tag name 存在 不允许添加")
	}
	err := s.tag.TagUpdate(req)
	if err == nil {
		res.Res = true
	}
	return err
}

func (s *TagServer) TagList(ctx context.Context, req *grpctag.TagListRequest, res *grpctag.TagListResponse) error {
	var (
		tagList []*grpctag.TagInfoResponse
	)
	data, err := s.tag.TagList(req)
	if err != nil {
		return errors.New("tag 获取失败")
	}
	if len(data) > 0 {
		for _, item := range data {
			row := &grpctag.TagInfoResponse{
				Id:        int32(item.ID),
				Name:      item.Name,
				Status:    int32(item.Status),
				CreatedAt: item.CreatedAt.Format("2006-01-02 15:04:05"),
			}
			tagList = append(tagList, row)
		}
	}
	res.TagList = tagList
	return nil
}

func (s *TagServer) TagInfo(ctx context.Context, req *grpctag.TagInfoRequest, res *grpctag.TagInfoResponse) error {
	data, err := s.tag.TagInfo(req)
	if err != nil {
		return errors.New("tag 获取失败")
	}
	res.Name = data.Name
	res.Status = int32(data.Status)
	res.CreatedAt = data.CreatedAt.Format("2006-01-02 15:04:05")
	res.Id = int32(data.ID)
	return nil
}
